package kotlin05.src.main.java.com.example.kotlin05.s03

/**
 * 92.filter
 * 过滤函数
 * 函数式编程的第二大类函数，过滤函数接受一个predicate函数，用它按给定条件
 * 检查接收者集合里的元素并给出true或false的判定。如果predicate函数返回true，
 * 受检元素就会添加到过滤函数返回的新集合中。如果predicate函数返回false，
 * 那么受检元素就被一处新集合
 *
 *
 *
 */

fun main() {
    val list = listOf("jack", "john", "jerry", "marry")
    val filter = list.filter {
        it.contains("j")
    }

    println(filter)

    //TODO: 和flapmap一起使用
    //TODO: 在flapmap遍历元素，filter函数会让predicate函数按过滤条件
    //TODO: 将符合条件的元素都放入它返回的新集合中。最后，flapmap会把变换器函数返回的
    //Todo:合并到一个新集合里

    val lists = listOf(
        listOf("red apple", "green apple", "blue apple"),
        listOf("red fish", "blue fish"),
        listOf("yellow banana", "teal banana")
    )

    val redItems = lists.flatMap { it ->
        it.filter {
            it.contains("red")
        }
    }

    println(redItems)

}